// app.js

// 工具类
import util from './utils/util.js';

App({
  globalData: {
    userInfo: null,
    navHeight: 0,
  },

  // 网络图片基础路径
  img_root: 'http://qq3fpcend.hn-bkt.clouddn.com/',

  /**
   * 生命周期函数--监听小程序初始化
   */
  onLaunch(opt) {
    // 授权登录&获取用户信息
    this.getUserInfo()

    // 重写分享方法 
    this.share()

    // 获取juhe省市数据
    if(!wx.getStorageSync('moon|citys')) {
      this.getCitysData()
    }

    // 获取顶部栏信息
    wx.getSystemInfo({
      success: res => {
        //导航高度
        this.globalData.navHeight = res.statusBarHeight + 46;
      }, fail(err) {
        console.log(err);
      }
    })
  },

  /**
   * 当小程序启动，或从后台进入前台显示，会触发 onShow
   */
  onShow(opt) {},

  /**
   * 授权登录&获取用户信息
   */
  getUserInfo() {
    wx.setStorageSync('user_id', 'admin');
  },

  /**
   * 当前用户id
   */
  getUserId() {
    return wx.getStorageSync('user_id');
  },

  /**
   * 生成转发的url参数
   */
  getShareUrlParams(params) {
    let _this = this;
    return util.urlEncode(Object.assign({
      referee_id: _this.getUserId()
    }, params));
  },

  /**
   * 显示成功提示框
   */
  showSuccess(msg, callback) {
    wx.showToast({
      title: msg,
      icon: 'success',
      mask: true,
      duration: 1500,
      success() {
        callback && (setTimeout(() => {
          callback();
        }, 1500));
      }
    });
  },

  /**
   * 显示失败提示框
   */
  showError(msg, callback) {
    wx.showModal({
      title: '友情提示',
      content: msg,
      showCancel: false,
      success(res) {
        callback && callback();
      }
    });
  },

  /**
   * 显示确定提示框
   */
  showConfirm(msg, callback) {
    wx.showModal({
      title: '注意',
      content: msg,
      success(res) {
        callback && callback(res);
      }
    });
  },

  /**
   * get请求
   */
  _get(url, data, success, fail, complete, check_login) {
    wx.showNavigationBarLoading();
    let _this = this;
    // 构造请求参数
    data = data || {};

    // 构造get请求
    let request = () => {
      data.token = wx.getStorageSync('token');
      wx.request({
        // url: _this.api_root + url,
        url: url,
        header: {
          'content-type': 'application/json'
        },
        data: data,
        success(res) {
          if (res.statusCode !== 200 || typeof res.data !== 'object') {
            _this.showError('网络请求出错');
            return false;
          }
          if (res.data.code === -1) {
            // 登录态失效, 重新登录
            wx.hideNavigationBarLoading();
            wx.clearStorageSync();
            wx.clearStorage();
            _this.doLogin(2);
          } else if (res.data.code === 0) {
            _this.showError(res.data.msg, () => {
              fail && fail(res);
            });
            return false;
          } else {
            success && success(res.data);
          }
        },
        fail(res) {
          _this.showError(res.errMsg, () => {
            fail && fail(res);
          });
        },
        complete(res) {
          wx.hideNavigationBarLoading();
          complete && complete(res);
        },
      });
    };
    // 判断是否需要验证登录
    check_login ? _this.doLogin(request) : request();
  },

  /**
   * post提交
   */
  _post_form(url, data, success, fail, complete, isShowNavBarLoading) {
    let _this = this;

    isShowNavBarLoading || true;
    data.token = wx.getStorageSync('token');

    // 在当前页面显示导航条加载动画
    if (isShowNavBarLoading == true) {
      wx.showNavigationBarLoading();
    }
    wx.request({
      url: _this.api_root + url,
      header: {
        'content-type': 'application/x-www-form-urlencoded',
      },
      method: 'POST',
      data: data,
      success(res) {
        if (res.statusCode !== 200 || typeof res.data !== 'object') {
          _this.showError('网络请求出错');
          return false;
        }
        if (res.data.code === -1) {
          // 登录态失效, 重新登录
          wx.hideNavigationBarLoading();
          //删掉用户信息
          wx.clearStorageSync();
          wx.clearStorage();
          _this.doLogin(1);
          return false;
        } else if (res.data.code === 0) {
          _this.showError(res.data.msg, () => {
            fail && fail(res);
          });
          return false;
        }
        success && success(res.data);
      },
      fail(res) {
        _this.showError(res.errMsg, () => {
          fail && fail(res);
        });
      },
      complete(res) {
        wx.hideNavigationBarLoading();
        complete && complete(res);
      }
    });
  },

  /**
   * 跳转到指定页面
   * 支持tabBar页面
   */
  navigationTo(url) {
    const tabBarLinks = [
      'pages/index/index',
      'pages/works/index',
      'pages/user/index',
      // 'pages/setting/index',
      'pages/xgPreventionGuide/index',
    ]

    if (!url || url.length == 0) {
      return false;
    }
    // tabBar页面
    if (tabBarLinks.indexOf(url) > -1) {
      wx.switchTab({
        url:  '/'+url
      });
    } else {
      // 普通页面
      wx.navigateTo({
        url: '/'+url
      });
    }
  },
  /**
   * 设置底部导航索引
   */
  setTabBar(obj, index) {
    if (typeof obj.getTabBar === 'function' &&
      obj.getTabBar()) {
      obj.getTabBar().setData({
        selected: index
      })
    }
  },
  /**
   * 判断是否为无效值 
   */
  isNullOrEmpty(value) {
    return value===""||value===null||value===undefined
  },

  /**
   * 获取juhe省市数据
   */
  getCitysData() {
    const _this = this
    _this._get('http://apis.juhe.cn/springTravel/citys?key=8f4951d26179db3f21b00729a53b7d37', {},
        (res) => {
          let citys = res.result
          wx.setStorageSync('moon|citys', citys)
        }, (err) => {
          // error callback
        }, (com) => {
          // complete callback
        })
  },

  /**
   * 重写分享方法 
   */
  share: function() {
    let _this = this
    wx.onAppRoute(function(res) {
      let pages = getCurrentPages(),
          view = pages[pages.length - 1],
          data;
      let titleArr = ['安利你一款超值好物', '老铁，快来看一下', '年终钜惠'];
      if(view) {
        data = view.data;
        if(data.isOverShare) {
          view.onShareAppMessage = function (opt) {
            let index = Math.floor(Math.random()*3);
            if (opt.from === 'button') {
              // 来自页面内转发按钮
              return {
                // title: titleArr[index],
                title: '年终钜惠, 速来领取!',
                imageUrl: _this.globalData.shareImageUrl,
                path: "/pages/index/index?" + _this.getShareUrlParams(),
              }
            } else {
              return {
                // title: titleArr[index],
                title: '年终钜惠, 速来领取!',
                path: "/pages/index/index?" + _this.getShareUrlParams(),
              };
            }
          }
        }
      }
    })
  },

  /**
   * 抽卡人生
   */
  drawingCard() {
    let cardsList = this.getCardsList()
    let list = cardsList.slice(1, cardsList.length)
    let random = Math.floor(Math.random() * 9)
    let selected = list[random]
    return selected
  },
  refreshCardsList(id) {
    let cardsQuantity = this.cardsQuantity
    if (id) {
      // 有id则找到相应id的卡num+1
      cardsQuantity.forEach((item, index) => {
        if (item.id === id) {
          item.num += 1
        }
      })
    } else {
      // 没有id则把所有卡num-1(除仨牛卡外)
    }
  },
  getCardCollectionData() {
    let _this = this
    let cardCollectionData = _this.cardCollectionData
    let sysImg = {
      mainBg: _this.img_root + 'indexBg.jpg',
      btnBg: _this.img_root + 'btnBg.png',
      activeTitleImg: _this.img_root + 'cardCollectionTitle.png',
      priceDetailsImg: _this.img_root + 'prizeDetails.jpg',
    }
    let obj = Object.assign(cardCollectionData, sysImg)

    return obj
  },
  getCardsList() {
    let _this = this
    let cardsList = [
      {
        name: '牛牛牛',
        id: '0',
        type: 0, // 0为仨牛卡, 1为普通卡
        bigCardUrl: _this.img_root + 'isOpened.png',
        bigCardEmptyUrl: _this.img_root + 'waitForOpen.png',
        smallCardUrl: _this.img_root + 'samllCard_threeOx.png',
        smallCardEmptyUrl: _this.img_root + 'samllCard_threeOx.png',
        num: 0,
      },
      {
        name: '财如牛毛',
        id: '1',
        type: 1, // 0为仨牛卡, 1为普通卡
        bigCardUrl: _this.img_root + 'bigCard_1.png',
        bigCardEmptyUrl: _this.img_root + 'bigCard_empty_1.png',
        smallCardUrl: _this.img_root + 'smallCard_1.png',
        smallCardEmptyUrl: _this.img_root + 'smallCard_empty_1.png',
        num: 1,
      },
      {
        name: '牛年如意',
        id: '2',
        type: 1, // 0为仨牛卡, 1为普通卡
        bigCardUrl: _this.img_root + 'bigCard_2.png',
        bigCardEmptyUrl: _this.img_root + 'bigCard_empty_2.png',
        smallCardUrl: _this.img_root + 'smallCard_2.png',
        smallCardEmptyUrl: _this.img_root + 'smallCard_empty_2.png',
        num: 0,
      },
      {
        name: '牛运亨通',
        id: '3',
        type: 1, // 0为仨牛卡, 1为普通卡
        bigCardUrl: _this.img_root + 'bigCard_3.png',
        bigCardEmptyUrl: _this.img_root + 'bigCard_empty_3.png',
        smallCardUrl: _this.img_root + 'smallCard_3.png',
        smallCardEmptyUrl: _this.img_root + 'smallCard_empty_3.png',
        num: 0,
      },
      {
        name: '牛势冲盘',
        id: '4',
        type: 1, // 0为仨牛卡, 1为普通卡
        bigCardUrl: _this.img_root + 'bigCard_4.png',
        bigCardEmptyUrl: _this.img_root + 'bigCard_empty_4.png',
        smallCardUrl: _this.img_root + 'smallCard_4.png',
        smallCardEmptyUrl: _this.img_root + 'smallCard_empty_4.png',
        num: 0,
      },
      {
        name: '牛角勾福',
        id: '5',
        type: 1, // 0为仨牛卡, 1为普通卡
        bigCardUrl: _this.img_root + 'bigCard_5.png',
        bigCardEmptyUrl: _this.img_root + 'bigCard_empty_5.png',
        smallCardUrl: _this.img_root + 'smallCard_5.png',
        smallCardEmptyUrl: _this.img_root + 'smallCard_empty_5.png',
        num: 0,
      },
      {
        name: '牛年大吉',
        id: '6',
        type: 1, // 0为仨牛卡, 1为普通卡
        bigCardUrl: _this.img_root + 'bigCard_6.png',
        bigCardEmptyUrl: _this.img_root + 'bigCard_empty_6.png',
        smallCardUrl: _this.img_root + 'smallCard_6.png',
        smallCardEmptyUrl: _this.img_root + 'smallCard_empty_6.png',
        num: 0,
      },
      {
        name: '牛劲百倍',
        id: '7',
        type: 1, // 0为仨牛卡, 1为普通卡
        bigCardUrl: _this.img_root + 'bigCard_7.png',
        bigCardEmptyUrl: _this.img_root + 'bigCard_empty_7.png',
        smallCardUrl: _this.img_root + 'smallCard_7.png',
        smallCardEmptyUrl: _this.img_root + 'smallCard_empty_7.png',
        num: 0,
      },
      {
        name: '牛气哄哄',
        id: '8',
        type: 1, // 0为仨牛卡, 1为普通卡
        bigCardUrl: _this.img_root + 'bigCard_8.png',
        bigCardEmptyUrl: _this.img_root + 'bigCard_empty_8.png',
        smallCardUrl: _this.img_root + 'smallCard_8.png',
        smallCardEmptyUrl: _this.img_root + 'smallCard_empty_8.png',
        num: 0,
      },
      {
        name: '牛福永恒',
        id: '9',
        type: 1, // 0为仨牛卡, 1为普通卡
        bigCardUrl: _this.img_root + 'bigCard_9.png',
        bigCardEmptyUrl: _this.img_root + 'bigCard_empty_9.png',
        smallCardUrl: _this.img_root + 'smallCard_9.png',
        smallCardEmptyUrl: _this.img_root + 'smallCard_empty_9.png',
        num: 0,
      }
    ]
    let cardsQuantity = _this.cardsQuantity
    cardsList.forEach((item, index) => {
      item.num = cardsQuantity[index].num
    })

    return cardsList
  },
  // 用来存储抽卡人生相关设置
  cardCollectionData: {
    isOpen: false, // 是否已开奖
    freeDrawAble: true, // 是否开启免费抽卡
    totalFreeDraw: 3, // 免费抽卡总次数
    currentFreeDraw: 3, // 当前免费抽卡次数
    paidDrawAble: true, // 是否开启付费抽卡
    paidDrawPrice: 1, // 付费抽卡价格
    totalPaidDraw: 1, // 付费抽卡总次数
    currentPaidDraw: 1, // 当前付费抽卡次数
    debtDraw: 0, // 已付费但未抽卡次数, 属于系统故障或断网导致的抽卡次数
    isAllCollect: false, // 是否已集齐九牛
    isMerge: false, // 是否已合成仨牛
  },
  // 用来存储卡片的数量
  cardsQuantity: [
    {
      name: '牛牛牛',
      id: '0',
      type: 0, // 0为仨牛卡, 1为普通卡
      num: 0,
    },
    {
      name: '财如牛毛',
      id: '1',
      type: 1, // 0为仨牛卡, 1为普通卡
      num: 1,
    },
    {
      name: '牛年如意',
      id: '2',
      type: 1, // 0为仨牛卡, 1为普通卡
      num: 0,
    },
    {
      name: '牛运亨通',
      id: '3',
      type: 1, // 0为仨牛卡, 1为普通卡
      num: 0,
    },
    {
      name: '牛势冲盘',
      id: '4',
      type: 1, // 0为仨牛卡, 1为普通卡
      num: 0,
    },
    {
      name: '牛角勾福',
      id: '5',
      type: 1, // 0为仨牛卡, 1为普通卡
      num: 0,
    },
    {
      name: '牛年大吉',
      id: '6',
      type: 1, // 0为仨牛卡, 1为普通卡
      num: 0,
    },
    {
      name: '牛劲百倍',
      id: '7',
      type: 1, // 0为仨牛卡, 1为普通卡
      num: 0,
    },
    {
      name: '牛气哄哄',
      id: '8',
      type: 1, // 0为仨牛卡, 1为普通卡
      num: 0,
    },
    {
      name: '牛福永恒',
      id: '9',
      type: 1, // 0为仨牛卡, 1为普通卡
      num: 0,
    }
  ],

  /**
   * 今日运势
   */
  wuxingList: ['金', '木', '水', '火', '土'],
  wuxingColor: [
    {name: '雨黛青', color: '#B9FE82'},
    {name: '墨玉绿', color: '#3ACB2E'},
    {name: '玳瑁红', color: '#EF0000'},
    {name: '乌绛紫', color: '#AE67F4'},
    {name: '鎏穗黄', color: '#E7A139'},
    {name: '象牙白', color: '#FFFFFF'},
    {name: '古耀金', color: '#FFE600'},
    {name: '珂润蓝', color: '#95D8FE'},
    {name: '寂静黑', color: '#111111'},
  ],
  directionArr: ['正东', '正南', '正西', '正北', '东南', '东北', '西南', '西北'],
  getTodayLucky() {
    let data = {}
    let random = Math.floor(Math.random() * 5)
    // 时辰运势
    let hourList = []
    for(let i = 0; i < 12; i++) {
      let score = Math.floor(Math.random() * 100)
      hourList.push(score)
    }
    // 幸运色
    let colorList = JSON.parse(JSON.stringify(this.wuxingColor))
    let colorArr = []
    for(let i = 0; i < 2; i++) {
      let colorRan = Math.floor(Math.random() * colorList.length)
      colorArr.push(colorList[colorRan])
      colorList.splice(colorRan, 1) // 传入一个删除一个, 避免重复传入
    }
    // 幸运数字
    let luckyNum = []
    for(let i = 0; i < 2; i++) {
      let num = Math.floor(Math.random() * 99)
      luckyNum.push(num)
    }
    // 幸运方向
    let directionRan = Math.floor(Math.random() * this.directionArr.length)

    data.wuxing = this.wuxingList[random]
    data.hourList = hourList
    data.colorList = colorArr
    data.luckyNum = luckyNum.join(' or ')
    data.luckyDirection = this.directionArr[directionRan]

    return data
  },
})
